package demo2;


abstract class Shape{
    /* 1.抽象类 -- 使用abstract修饰类
       2.抽象类当中可以包含普通类所能包含的成员
       3.抽象类和普通类不一样的是，抽象类当中可以包含抽象方法
       4.抽象方法使用abstract修饰的，这个方法没有具体的实现
       5.不能实例化抽象类，就是说不能new
       6.抽象存在的最大意义就是为了被继承
       7.如果一个普通类继承了抽象类，此时必须重写抽象类当中的方法
       8.如果一个抽象类A继承了一个抽象类B，则A不需要重写B的方法，但是如果A再被普通类继承，就要重写
       9.抽象方法不能是私有的，static也不行，要满足重写的规则，final不可以，它和abstract矛盾
       10.抽象类当中可以有构造方法，为了方便子类能够调用
     */

    public abstract void draw();
}
class Rect extends Shape{
    @Override
    public void draw() {
        System.out.println("矩形！");
    }
}
class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("画圆！");
    }
}

public class Test {
    public static void main(String[] args) {
        //Shape shape = new Shape();
        Shape shape = new Rect();
    }

}
